package com.yanqingshan.platform.module.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yanqingshan.platform.common.core.domain.BasePageList;
import com.yanqingshan.platform.common.core.domain.PageQuery;
import com.yanqingshan.platform.common.core.domain.R;
import com.yanqingshan.platform.module.auth.model.domain.UserTokenInfo;
import com.yanqingshan.platform.module.auth.model.dto.AuthLoginReqVO;
import com.yanqingshan.platform.module.sys.model.domain.SysRole;
import com.yanqingshan.platform.module.sys.model.domain.SysUser;
import com.yanqingshan.platform.module.sys.model.vo.ChangePasswordReqVO;
import com.yanqingshan.platform.module.sys.model.vo.SysUserDetailsRespVO;
import com.yanqingshan.platform.module.sys.model.vo.SysUserReqVO;
import com.yanqingshan.platform.module.sys.model.vo.SysUserRespVO;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 功能描述: 系统用户Service接口
 *
 * @author yanqs
 * @since 2023-05-12
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 创建系统用户
     *
     * @param param 请求参数
     * @return R
     */
    R createUser(SysUserReqVO param);

    /**
     * 更新系统用户信息
     *
     * @param param 请求参数
     * @return R
     */
    R updateUser(SysUserReqVO param);

    /**
     * 修改密码
     *
     * @param param 请求参数
     * @return R
     */
    R changePassword(ChangePasswordReqVO param);

    /**
     * 系统用户登录
     *
     * @param param 请求参数
     * @return R
     */
    R<UserTokenInfo> login(AuthLoginReqVO param);

    /**
     * 删除用户
     *
     * @param id 用户id
     * @return R
     */
    R delUser(Long id);

    /**
     * 分页查询用户
     *
     * @param param 查询参数
     * @param query 分页参数
     * @return
     */
    BasePageList<SysUserRespVO> pageCustom(SysUserReqVO param, PageQuery query);

    /**
     * 根据用户id获取详情
     *
     * @param id 用户id
     * @return 用户信息
     */
    SysUserDetailsRespVO getUserDetails(Long id);

    /**
     * 验证用户是否唯一
     * @param userName 用户名
     * @param userId 用户id
     * @return Long
     */
    Long validateUserName(String userName,Long userId);

    /**
     * 查询用户待分配角色
     * @param userId 用户id
     * @return
     */
    List<SysRole> queryGrantRolesByUserId(Long userId);

    /**
     * 查询用户分配角色
     * @param userId 用户id
     * @return
     */
    List<SysRole> queryRolesByUserId(Long userId);


    /**
     * 批量重置密码
     * @param userIds 用户ID
     * @param password 密码
     * @return
     */
    boolean resetPassword(List<Long> userIds, String password);
}
